﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class ConsultarApoderados : Form
    {
        public ConsultarApoderados()
        {
            InitializeComponent();
        }
        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        IEnumerable<Apoderado> ListaApoderado;
        IEnumerable<Parvulo> ListaParvulos;
        Generador g = new Generador();
        Validacion v = new Validacion();

        private void ConsultarApoderados_Load(object sender, EventArgs e)
        {
            LlenarApoderados();
            if (dgv_Apoderados.RowCount == 0) { this.Enabled = false; }
            else
            {
                this.Enabled = true;
                cbx_NivelNiño.Enabled = false;
                rad_BuscarApoderado.Checked = true;
            }
            cbx_NivelNiño.DataSource = BEDE.Nivel.OrderBy(c => c.año);
            cbx_NivelNiño.DisplayMember = "nombre";
            cbx_NivelNiño.ValueMember = "cod_nivel";
            cbx_NivelNiño.SelectedIndex = -1;
            lbl_Apodera.Text = "";
        }
        public void LlenarApoderados()
        {
            dgv_Apoderados.Rows.Clear();
            ListaApoderado = BEDE.Apoderado.OrderBy(a => a.rut_apoderado);
            foreach (Apoderado aux in ListaApoderado)
            {
                dgv_Apoderados.Rows.Add(aux.rut_apoderado.ToString(), aux.nombre.ToString(), aux.fono.ToString(), aux.celular.ToString(), aux.lugar_trabajo.ToString(), aux.email.ToString());
            }
            if (dgv_Apoderados.RowCount == 0) { this.Enabled = false; }
            else { this.Enabled = true; }
        }

        private void rad_BuscarApoderado_CheckedChanged(object sender, EventArgs e)
        {
            LlenarApoderados();
            cbx_NivelNiño.SelectedIndex = -1;
            cbx_NivelNiño.Enabled = false;
            tbx_Usuario.Enabled = true;
            tbx_Usuario.Clear();
        }

        private void btn_Buscar_Click(object sender, EventArgs e)
        {
            tbx_Usuario.Text = tbx_Usuario.Text.Trim();
            if (rad_BuscarApoderado.Checked == true)
            {
                if (tbx_Usuario.Text.Length >= 4)
                {
                    errorProvider1.SetError(rad_BuscarApoderado, "");
                    g.BuscarEnGrid(tbx_Usuario.Text.ToString(), dgv_Apoderados);
                }
                else { errorProvider1.SetError(rad_BuscarApoderado, "El dato ingresado debe de tener al menos 4 caracteres para poder iniciar una busqueda efectiva."); }
            }
            else
            {
                if (rad_FiltroNivel.Checked == true)
                {
                    if (cbx_NivelNiño.Text != "")
                    {
                        dgv_Apoderados.Rows.Clear();
                        int aa = int.Parse(cbx_NivelNiño.SelectedValue.ToString());
                        ListaParvulos = BEDE.Parvulo.Where(c => c.cod_nivel == aa).OrderBy(c => c.folio_ficha);
                        foreach (Parvulo aux in ListaParvulos)
                        {
                            dgv_Apoderados.Rows.Add(aux.Apoderado.rut_apoderado.ToString(), aux.Apoderado.nombre.Replace("·", " ").ToString(), aux.Apoderado.fono.ToString(), aux.Apoderado.celular.ToString(), aux.Apoderado.lugar_trabajo.ToString(), aux.Apoderado.email.ToString().ToLower());
                        }
                        if (dgv_Apoderados.RowCount == 0) { MessageBox.Show("El nivel seleccionado no tiene apoderados asociados aún.", "NO SE ENCONTRARON REGISTROS.", MessageBoxButtons.OK, MessageBoxIcon.Information); }
                    }
                    else { MessageBox.Show("Olvidó seleccionar un nivel para aplicar el filtro de búsqueda.","ERROR DE FILTRO.",MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
                }
                else
                {
                    if (rad_BuscarPorNiño.Checked == true)
                    {
                        int valdato = v.ValidarTextos(tbx_Usuario.Text);
                        if (valdato == 0)
                        { 
                            valdato = v.ValidarNumeros(tbx_Usuario.Text);
                            if (valdato == 0) { errorProvider1.SetError(rad_BuscarPorNiño, "El dato ingresado no es una buena semilla para la busqueda.");}
                            else // se busca por el rut del niño
                            {
                                try
                                {
                                    int a = int.Parse(tbx_Usuario.Text);
                                    Parvulo aux = BEDE.Parvulo.Single(c => c.rut_niño == a);
                                    g.BuscarEnGrid(aux.Apoderado.rut_apoderado.ToString(), dgv_Apoderados);
                                }
                                catch { MessageBox.Show("No se encontró ningun registro relacionado al dato que se ingresó para la busqueda.", "ERROR DE BÚSQUEDA.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                            }
                        }
                        else // se busca por el nombre del niño...
                        {
                            try
                            {
                                string nombre = tbx_Usuario.Text;
                                Parvulo aux = BEDE.Parvulo.Single(c => c.nombre.Replace("·"," ").Contains(nombre));
                                g.BuscarEnGrid(aux.Apoderado.rut_apoderado.ToString(), dgv_Apoderados);
                            }
                            catch { MessageBox.Show("No se encontró ningun registro relacionado al dato que se ingresó para la busqueda.", "ERROR DE BÚSQUEDA.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                        }
                    }
                }
            }
        }

        private void tbx_Usuario_TextChanged(object sender, EventArgs e)
        {
            if (rad_BuscarApoderado.Checked == true)
            {
                if (tbx_Usuario.Text.Length >= 4) { errorProvider1.SetError(rad_BuscarApoderado, ""); }
            }
            else
            {
                if (rad_BuscarPorNiño.Checked == true) { if (tbx_Usuario.Text.Length >= 4) { errorProvider1.SetError(rad_BuscarPorNiño, ""); } }
            }
        }

        private void rad_FiltroNivel_CheckedChanged(object sender, EventArgs e)
        {
            LlenarApoderados();
            tbx_Usuario.Clear();
            tbx_Usuario.Enabled = false;
            cbx_NivelNiño.Enabled = true;
        }

        private void rad_BuscarPorNiño_CheckedChanged(object sender, EventArgs e)
        {
            LlenarApoderados();
            cbx_NivelNiño.SelectedIndex = -1;
            cbx_NivelNiño.Enabled = false;
            tbx_Usuario.Enabled = true;
            tbx_Usuario.Clear();
        }

        private void dgv_Apoderados_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int a = int.Parse(dgv_Apoderados.CurrentRow.Cells[0].Value.ToString());
            IEnumerable<Parvulo> Lista = BEDE.Parvulo.Where(c => c.Apoderado.rut_apoderado == a).OrderBy(c => c.folio_ficha);
            string eso = "";
            foreach (Parvulo aux in Lista)
            {
                if (eso != "") { eso += "\n"; }
                eso+= " >> " + aux.nombre.Replace("·", " ").ToString() + " (RUT : " + aux.rut_niño.ToString() + ").";
            }
            lbl_Apodera.Text = eso.ToString();
        }
    }
}
